// 条件编译，防止头文件重复包含
#ifndef __M_UTIL_H__
#define __M_UTIL_H__
//  通⽤功能类，与业务⽆关的功能实现
//  1. 获取系统时间
//  2. 判断文件是否存在
//  3. 获取⽂件所在⽬录的路径
//  4. 创建⽬录
#include <iostream>
#include <ctime>
#include <sys/stat.h>
#include <sys/types.h>
namespace logsLearn
{
    namespace util
    {
        // 日期类
        class Data
        {
        public:
            // 获取系统时间
            static time_t now()
            {
                // 返回当前系统时间
                return time(nullptr);
            }
        };
        // 文件类
        class File
        {
        public:
            // 判断文件是否存在
            static bool exists(const std::string &pathname)
            { // 定义了一个stat的结构体变量
                struct stat st;
                // 获取文件信息不成功，进入条件
                if (stat(pathname.c_str(), &st) < 0)
                {
                    return false;
                }
                return true;
            }
            // 获取⽂件所在⽬录的路径
            static std::string path(const std::string &pathname)
            { 
                if (pathname.empty()) return ".";
                // pos是当前查找的最后“/\\”的位置
                size_t pos = pathname.find_last_of("/\\");
                // 没有找到"/\\"
                if (pos == std::string::npos)
                    return ".";
                // 找到了,返回路径,左闭右开原则，要想包括pos位置，需要加1
                return pathname.substr(0, pos + 1);
            }
            // 创建⽬录
            static void createDirectory(const std::string &pathname)
            { // pos找到的位置，idx是存的位置

                size_t pos = 0, idx = 0;
                while (idx < pathname.size())
                {
                    // 遍历路径每找到最后一个"/\\"创建文件夹
                    size_t pos = pathname.find_first_of("/\\", idx);
                    if (pos == std::string::npos)
                    { // 创建文件夹,pathname.c_str()表示路径名,0777表示权限
                        mkdir(pathname.c_str(), 0777);
                    }
                    // 前面的路径
                    std::string parent_dir = pathname.substr(0, pos + 1);
                    // 文件是否存在
                    if (exists(parent_dir) == true)
                    {
                        idx = pos + 1;
                        continue;
                    }
                    // 文件不存在，创建文件
                    mkdir(parent_dir.c_str(), 0777);
                    idx = pos + 1;
                }
            }
        };
    }
}
#endif